<<<предыдущая глава к содержанию цитированная литература >>>

9. Элементарная графика

9.1. Двумерная графика
Графика в линейном масштабе
Построение графиков функций
9.2. Трехмерная графика
9.3. Задание осей координат
9.4. Линии уровня
9.5. Дополнительные возможности
9.6. Специальная графика

9.1. Двумерная графика

Здесь мы рассмотрим лишь небольшую часть графических команд высокого уровня, не затрагивая их базу - графические объекты (Axes, Line, Patch, Surface, Text).

Графика в линейном масштабе

plot (y) - построение графика одномерного массива в зависимости от номера элемента (для двумерного массива строятся графики для столбцов); plot (x,y) - построение графика функции y=y(x); при двумерном х строятся графики х=х(у); если оба массива двумерные, строятся зависимости для соответствующих столбцов; plot (x,y, LineSpec) - заданием строки LineSpec (до 3 символов) определяет стиль линий , форму маркера точек и цвет линий и маркера:
Символ стиля линии Цвет Цвет
Непрерывная-
Штриховая --
Двойной пунктир:
Штрихпунктирная -.
Желтый y
Фиолетовый m
Голубой c
Красный r
Зеленый g
Синий b
Белый w
Черный k

Маркер может определяться символами :

. + * ° ґ s (квадрат) d (ромб) р (пятиугольник) h(шестиугольник)

v ^ < > (стрелки)

По умолчанию выбирается непрерывная линия с точечным маркером и чередованием цветов с желтого по синий.

plot (x1,y1, LineSpec1, x1,y1, LineSpec2,...) - строит на одном графике несколько линий (диапазон по аргументу - объединение х1 и х2;

plot (...,'PropertyName',PropertyValue,...) -задает значения свойств графического объекта Line (толщину линий LineWidth, размер маркера MarcerSize, цвет маркера MarcerFaceColor и и др.) .
>> x=0:0.3:6;
>> y=besselj(0,x); % функция J0(x)
>> x1=0:0.4:8;
>> y1=besselj(1,x1); % функция J1(x)
>> plot(x,y,'-sk', x1,y1,'-pk','LineWidth',1 ) % рис.9.1

Построение графиков функций

fplot( <имя функции>,limits) строит график функции (функций) в интервале limits=[xmin,xmax]. В качестве имени функции может использоваться М-файл или строка типа 'sin(x)', '[sin(x) cos(x) ]', '[sin(x), myfun1(x), myfun2(x)]'. Можно установить размеры графика по оси значений функции limits=[xmin,xmax ymin ymax].

fplot( <имя функции>,limits, eps) строит график c относительной погрешностью ерs (по умолчанию 0.002) и максимальное число шагов (1/eps)+1. Эту конструкцию можно дополнить четвертым параметром n (n+1 - минимальное число точек) и параметром LineSpec:

>>fplot( '[besselj(0,x) besselj(1,x) 0]',[0 10],[],20) & рис.9.2.

ezplot('f(x)') строит график f(x), заданной символьным выражением (например, ezplot('x^2-2*x+1') ), на интервале [-2p 2p] с выводом выражения в качестве заголовка графика.

ezplot('f(x)', limits) и ezplot('f(x)', limits, fig) строят график f(x) на указанном интервале и в заданном окне.
Рис.9.1
Рис.9.1.
Рис.9.2
Рис.9.2.

График в полярных координатах определяется функциями polar(f,r) и polar(f,r, LineSpec), где f - массив значений угла и r - соответствующие значения радиуса : x=rЧcos(j), y=rЧsin(j):
>> f=0:0.01:2*pi; >> f=0:0.01:12*pi;
>> r=sin(2.*f).*cos(2.*f); >> r=exp(-0.1*f);
>> hp=polar(f,r),hold on >> hp=polar(f,r) ,hold on
>> set(hp,'LineWidth',4) % рис.9.3 >> set(hp,'LineWidth',2) % рис.9.4
Рис.9.3
Рис.9.3.
Рис.9.4
Рис.9.4.

График в логарифмическом масштабе задается функцией loglog c тем же набором параметров, что и plot, с той лишь разницей, что проводится масштабирование десятичным логарифмированием по обеим координатам.

График в полулогарифмическом масштабе задается функциями semilogx и semilogy c тем же набором параметров, что и plot (проводится масштабирование логарифмированием по одной из координат).

График с двумя осями ординат (одна отображается слева, другая справа) реализуется функцией plotyy(x1,y1,x2,y2) и той же функцией с добавлением параметров масштабирования 'f1' или 'f1','f2', в роли которых могут выступать plot, semilogx, semilogx, loglog:
>> x=0:0.01:12*pi;
>> plotyy(x,sin(x).*exp(-0.1.*x),x, 10*exp(-0.1.*x)) % Рис.9.5

Рис.9.5
Рис.9.5.

9.2. Трехмерная графика

В трехмерной графике выполняются представления функции z=z(x,y), отличающиеся способом соединения точек: линия, сечения, сетчатая или сплошная поверхность.

plot3(x,y,z) в тех же вариациях, что и plot, предполагает задание одномерных и двумерных массивов (строятся точки с координатами x(i,:),y(i,:),z(i,:) для каждого столбца и соединяются прямыми линиями. Если используется [x,y]=meshgrid(...), то строятся сечения.
>> t=0:pi/50:10*pi; >> [x,y]=meshgrid([-2:0.1:2],[-2:0.01:2]);
>> plot3(sin(t),cos(t),t) %Рис.9.6 >> z=exp(-x.^2-y.^2);
>> plot3(x,y,z) %Рис.9.7
Рис.9.6
Рис.9.6.
Рис.9.7
Рис.9.7.

mesh(x,y,z,c), mesh(z,c), mesh(z) определяют задание сетчатой поверхности (массив с определяет цвета узлов поверхности; если x,y не ука-заны, то x=1:n, y=1:m, где [m,n]=size(z).
>> [x,y]=meshgrid(-8:0.5:8);Аналогичная функция meshс в дополнение
к поверхности строит проекции линий уровня,
а meshz делает срез поверхности до нулевого
уровня (своеобразный пьедестал).
>> t=sqrt(x.^2+y.^2)+0.001;
>> z=sin(t)./t;
>> mesh(x,y,z) % Рис.9.8
Рис.9.8
Рис.9.8.
>> meshc(x,y,z) %Рис.9.9 >> meshz(x,y,z) %Рис.9.10
Рис.9.9
Рис.9.9.
Рис.9.10
Рис.9.10.

surf(x,y,z,c), surf(z,c), surf(z) определяют задание сплошной поверхности, отличаясь от mesh системой окраски; аналогичная функция surfс(...) задает проекции линий уровня.

Реализация трехмерной графики может сопровождаться множеством вспомогательных команд, например:

hidden on/off включает или выключает режим удаления невидимых линий (по умолчанию on);

shading faceted / flat / interp устанавливает затенение поверхностей (по умолчанию faceted дает равномерную окраску ячеек с черными гранями, flat - цветами узлов сетки, interp - интерполяцией цветов.

9.3. Задание осей координат

Создание графического объекта исходит автоматически при обращении к командам, порождающим объекты Line и Surface, но может выполняться и командой axec('<имя свойства>',<значение>, ...). Есть и команды более высокого уровня:

axis([xmin xmax ymin ymax]), axis([xmin xmax ymin ymax zmin zmax]) устанавливает масштаб по осям;

axes off/on выключает (включает) вывод на координатные оси обозначений и маркеров;

grid on/off, grid включает (выключает) или переключает режим нанесения координатной сетки на осях;

box on/off, box включает (выключает) или переключает режим рисования контура параллелепипеда, трехмерный объект;

zoom on/off включает (выключает) режим интерактивного масштабирования графиков (левая мышь около точки увеличивает масштаб вдвое, правая - уменьшает; удержанием левой мыши можно выделить прямоугольную область для детального просмотра; zoom out восстанавливает исходный график.

9.4. Линии уровня

В отличие от meshс (...) и surfс(...) функция contour рисует только линии уровня соответствующих поверхностей и выступает в многообразии синтаксических форм: contour(X,Y,Z) - для массива Z =Z(X,Y), contour(X,Y,Z,n) - то же с указанием числа линий уровня (по умолчанию 10), contour(X,Y,Z,v) - то же для массива указанных значений ; contour(Z), contour(Z,n), contour(Z,v) - аналогичные функции без указания диапазонов для аргументов и contour(...,LineSpec) - аналогичные функции c указанием типа и цвета линий (см. plot); [C,h]=contour (...) возвращает массив С и вектор дескрипторов, позволяя тем самым продолжить работу с рисунком (давать оцифровку линий, заголовки и др.).

Функция contourf(...) закрашивает области между линиями уровня, аналогична contourf(...) с разницей в формате[C,h, cf]=contour (...), где cf определяет матрицу раскраски.
>> [x,y]=meshgrid(-8:0.5:8); >> [x,y]=meshgrid(-2:0.25:2);
>> t=sqrt(x.^2+y.^2)+0.001; >> t=sqrt(x.^2+y.^2)+0.001;
>> z=sin(t).^3./t; >> z=sin(t).^3./t;
>> [c,h]=contour(x,y,z,20); >> [c,h,cf]=contourf(x,y,z,4);
Рис.9.11
Рис.9.11
Рис.9.12
Рис.9.12
Рис.9.13
Рис.9.13
Функция contour3(...) по синтаксису полностью аналогична contour(...), но изображает не проекции линий уровня, а рисует их в пространственной интерпретации; так команда [c,h]=contour3(x,y,z,20); дает фигуру (рис.9.13).

9.5. Дополнительные возможности

Создание нового графического окна figure ; командой figure(n) можно выбирать некоторое из созданных окон в качестве текущего.

Включение (выключение) режима сохранения текущего графика :
hold on/off, hold .

Вывод заголовков для графиков (в текущем окне):

title('текст'), title(<имя функции-строки>'), title(..., 'Property-Name','PropertyValue',...), h=title(...).
Вывод графиков в нескольких окнах рисунка: subplot(m,n,k), subplot(mnk) - m - число окон по горизонтали, n - по вертикали, k - номер окна:Рис.9.14
Рис.9.14
>>subplot(121)
>> plot([1:0.3:4])
>> subplot(122)
>> plot([4:-0.3:1])
>> title ('y=4-0.3(x-1)')

Вывод текста для обозначения координатной оси : xlabel(...), ylabel(...), zlabel(...) - синтаксис аналогичен title(...).

Вывод текста в указанной позиции графика: text(x,y,'текст'), text(x,y,z,'текст'), text(...'PropertyName','PropertyValue',...), h=text(...).) - x,y,z -координаты начала текста.

Вывод текста под управлением мыши: gtext('текст'), h= gtext('текст') - выведенный текст можно перемещать мышью.

Вывод легенды legend('текст1','текст2',...), legend(M), legend(h,M), legend off, legend(...,pos), h= legend(...) - здесь М - строковый массив (длина строк одинакова), off удаляет пояснения к графику, pos определяет позицию легенды ( -1 - справа от графика, 0 - в одном из 4 углов с минимумом потерь точек графика, 1-4 - в указанном углу, [x y] - в указанном месте); можно перетаскивать легенду мышью.
>> subplot(111)
>> t=[0:pi/30:2*pi];
>> a=sin(t); b=cos(t);
>> x=0:60;
>> plot(x,a+b),hold on
>> hp=plot(x,a', 'g', x,b','r'); set(hp,'LineWidth',2)
>> legend('a+b','a=sin(t)','b=cos(t)')
>> title('y=sin(t)+cos(t)','FontSize',12,'FontWeight','bold')

Рис.9.15
Рис.9.15

Маркировка линий уровня, создаваемых функциями contour, contour3, contourf : clabel(C,h), clabel(C,h,v), clabel(C,h,'manual'), clabel(C), clabel(C,v), clabel(C,'manual') - при наличии h маркировка на линиях, при наличии 'manual' - принудительная маркировка нажатием левой мыши или пробела (правая мышь или Return завершает маркировку).

9.6. Специальная графика

Раздел специальной графики включает команды для построения диаграмм, гистограмм и прочих дискретных графиков.

Столбцовые диаграммы реализуются функциями bar и barh: bar(y), bar(x,y) , h=bar(...) - здесь y -массив (одно- или двумерный), x - одномерный, упорядоченный по возрастанию массив (число смежных по горизонтали столбцов диаграммы равно числу столбцов массива у); можно указать параметры относительной ширины столбцов (1 - касание, >1 - перекрытие, < 1 - c промежутками), или стиля ('group','stack') :
>> x=0:0.1:6; >> x=0:0.1:6;
>> y1=sin(x); y2=cos(x); y3=exp(-x./2); >> y1=sin(x); y2=cos(x); y3=exp(-x./2);
>> y=[y1;y2;y3]; >> y=[y1;y2;y3];
>> bar(x,y') >> bar(x,y','stack')
Рис.9.16
Рис.9.16
Рис.9.17
Рис.9.17

barh(...) отличается лишь размещением столбцов не по вертикали, а по горизонтали.

Секторная диаграмма реализуется функцией pie(x), pi(x,v), h=pie(...) - здесь v - вектор из 0 и 1 для отделения от диаграммы отдельных секторов:
>> x=[ 1 4 0.5 5.5 2];
>> pie(x,[0 1 0 0 0]) % Рис.9.18
Рис.9.18
Рис.9.18
Рис.9.19
Рис.9.19

Построение гистограммы hist(y), hist(y,x), hist(y,n), [p,x]=hist(y,...) реализует подсчет числа элементов по столбцам массива у в n (по умолчанию 10) интервалах:
>> x=-3:0.1:3;
>> t=randn(500,1);
>> hist(t,x) % Рис.9.19

Дискретный график stem(y), stem(x,y), stem(...,'fill'), stem(...,LineSpec), h=stem(...) аналогичен столбцовой диаграмме и выводит значения в виде отрезков с маркером ('fill' -закраска маркера):
>> x=-3:0.1:3;
>> f=exp(-x.^2/2);
>> stem(x,f) %Рис.9.20
Рис.9.20
Рис.9.20
Рис.9.21
Рис.9.21

Вывод поля точек выполняется функцией scatter(x,y,...) с возможностью указывать размер, цвет и заполненность маркера:
>> x=-3:0.1:3;
>> f=exp(-x.^2/2);
>> scatter(x,f,'filled') % Рис.9.21

Cреди многообразия функций специальной графики существенный интерес представляют функции поворота графического объекта rotate : например,
>> h=surf(...);
>> rotate (h,[1 0 0 ],90) & поворот по оси х на 90°
и функции поворота графического объекта с помощью мыши rotate3d on|ON|off (on - режим включен, off-выключен, ON - подавляет информа-цию о текущих углах).


<<<предыдущая глава